package com.doit.day01
//头等公民
//函数可以当作参数传递和返回值返回
/**
 * 函数和方法一样，也是一段代码逻辑得封装，便于后期复用
 * 语法：
 * ()=>{}
 */

object _09_函数 {
  def main(args: Array[String]): Unit = {

        //()   函数得参数
        //{}   函数体
        // =>  函数声明得标志
        //没有名字得函数，匿名函数
    //add 函数得名称
    /*
     MyFunction2<Integer, Integer, Integer> add = new MyFunction2<Integer, Integer, Integer>() {
            @Override
            public Integer apply(Integer integer, Integer integer2) {
                return integer + integer2;
            }
        };
        Integer res = add.apply(1, 2);
     */

    //接口得实现类对象  Function2[Int,Int,Int] java的写法
    //语法糖的写法  :(Int, Int) => Int
//    val add :(Int, Int) => Int= (a:Int, b:Int)=>{a+b}


//    val add :Function2[Int,Int,Int]= (a:Int,b:Int)=>{a+b}




//    val abc :Function2[Int,Int,Int]= add




    //在scala里面，有一个特殊得方法，叫apply
//    val res: Int = add.apply(1, 2)
//
//    val i: Int = abc(1, 2)



    val getMax :Function3[Int,Int,Int,Int]= (a:Int,b:Int,c:Int)=>{
      var max = a
      if(b > max) max = b
      if(c > max) max = c
      max
    }

    val fourMax :Function1[Int,Unit]=(a:Int)=>{
      println("hello")
    }
//    println(getMax(1,2,3))


  }
}
